//! 订阅
//! 
//! pubsub.rs
//! 
//! (RUST) alone
//! 
//! Create time: 2025-09-25		alone
//! Update time: 2025-09-25		alone
//! 

use tokio::sync::broadcast;

/// 订阅能力的通用抽象。
///
/// `Subscribe` 用于为类型提供“订阅事件”的能力约束，但**注意**当前签名
/// `fn subscribe(&self) -> broadcast::Receiver<Self::Event>` 返回的是**一个事件的broadcast::Receiver**
pub trait Subscribe  
{
	/// 事件类型。
    ///
    /// - `Clone`：允许在分发时复制事件给多个使用方。
    /// - `Send`：事件可以在线程间安全移动（用于异步/多线程场景）。
    /// - `'static`：事件内部不包含短生命周期的借用，便于放入通道/跨 `await`。
	type Event: Clone + Send + 'static;

	/// 为事件源创建一个新的订阅者接收器。
	///
	/// 每次调用都会返回一个**独立的** `broadcast::Receiver`，它拥有自己的读取游标：
	/// - 只会接收到**订阅之后**发布的事件（不会回放订阅之前的历史）。
	/// - 多个订阅者彼此独立，互不影响读取进度。
	fn subscribe(&self) -> broadcast::Receiver<Self::Event>;
}